
聚合类(不由用户提供、显式或继承的构造函数的类/结构，没有private或protected的非静态数据成员，没有虚函数，也没有virtual、private或protected基类)也可以是模板。例如:

\begin{lstlisting}[style=styleCXX]
template<typename T>
struct ValueWithComment {
	T value;
	std::string comment;
};
\end{lstlisting}

定义一个聚合，参数化了value的类型。可以像其他类模板一样声明对象，并且可以以聚合的方式进行使用:

\begin{lstlisting}[style=styleCXX]
ValueWithComment<int> vc;
vc.value = 42;
vc.comment = "initial value";
\end{lstlisting}

C++17后，甚至可以为聚合类模板定义推导策略:

\begin{lstlisting}[style=styleCXX]
ValueWithComment(char const*, char const*)
	-> ValueWithComment<std::string>;
ValueWithComment vc2 = {"hello", "initial value"};
\end{lstlisting}

因为ValueWithComment没有用于执行推导的构造函数，所以若没有推导策略，初始化将不可能完成。

标准库类std::array<>也是一个聚合，参数化了元素类型和大小。C++17标准库还为其定义了推导策略，这将在4.4.4节中讨论。
